package biz.inspeed.test.io;

import java.util.UUID;

/***
 * 定义消息的头部
 * 
 * @author NKY(ACNTWWW@GMAIL.COM) 2012-8-21
 */
public class Head
{
	/** body消息的长度 四个字节 */
	public int		messageLength	= 0;

	/**
	 *至少是5为数 
	 * 命令的编号 四个字节 commandNum命令编号，发送包为90000打头，回馈包为8打头（80000）, 心跳包70000打头
	 */
	public int		commandNum		= 0;

	/**
	 * 前缀19876，后三位表示命令级别的具体代码19876000
	 * 命令的级别 cmdLevel 四个字节，为1987600不用回复，为19876001，需要回复，19876002，强制发送，必须回复
	 */
	public int		commandLevel	= 0;

	/***
	 * 命令的唯一性表示 一般由客户端取随机数产生,用来唯一标示请求或者响应的消息 16bytes
	 */
	public byte [ ]	transactId		= BytesUtil.getID ();

	/***
	 * 消息的编号 四个字节，是一个递减的序列* 表示应答包的编号；依次递减， 0, 表示该包是最后一个数据包，必须为正数
	 */
	public int		serialNum		= 0;
	
	@Override
	public boolean equals(Object obj) {
		if(obj.getClass() != Head.class){
			return false;
		}else{
			Head other = (Head) obj;
			if(messageLength != other.messageLength){
				return false;
			}
			
			if(commandLevel != other.commandLevel){
				return false;
			}
			
			if(serialNum != other.serialNum){
				return false;
			}
			
			if(commandNum != other.commandNum){
				return false;
			}
			for(int i = 0,len = transactId.length; i < len; i++){
				if(transactId[i] != other.transactId[i]){
					return false;
				}
			}
		}
		return true;
	}

}
